Channel is the Kotlin approach for handling a "hot stream" of items, where the
work to build the items starts immediately, irrespective of whether anyone is
around to consume the results.
A simple way to create a Channel is to use the produce() function on CoroutineScope. You
provide a lambda expression, and it calls send() for every item that should
be placed into the stream. Here, we send a series of random numbers, with a delay
between each. Since produce() is defined on CoroutineScope, though, we need
to either:
Call
produce()from directly inside of ourlaunch()coroutine builder (asthisis aCoroutineScopein that lambda expression), orDefine our function that uses
produce()(randomPercentages()) as an extension function onCoroutineScope
A simple way to consume a Channel is to call consumeEach(). This takes a lambda
expression, and it is passed each send item from the Channel. consumeEach()
is a suspend function, so we need to call consumeEach() from inside of another
suspend function or from a coroutine builder, such as launch().